package com.lms.map;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @Author: 李孟帅
 * @CreateTime: 2020-06-08 06:47
 * @Description:
 */
public class ConcurrentHashMapDemo {
    public static void main(String[] args) {
        //创建一个新的，空的地图与默认的初始表大小（16）。
        ConcurrentHashMap<String, String> concurrentHashMap = new ConcurrentHashMap<>();
//      //创建一个新的空的地图，其初始表格大小适应指定数量的元素，而不需要动态调整大小。
        ConcurrentHashMap<Object, Object> concurrentHashMap1 = new ConcurrentHashMap<>(8);

        concurrentHashMap.put("a", "aa");
        concurrentHashMap.put("b", "bb");
        concurrentHashMap.put("c", "cc");
        concurrentHashMap.put("d", "dd");
        concurrentHashMap.put("e", "ee");
        concurrentHashMap.put("f", "ff");
        concurrentHashMap.put("g", "gg");

        //返回映射数。
        long l = concurrentHashMap.mappingCount();
        //返回指定键映射到的值，如果此映射不包含该键的映射，则返回给定的默认值。
        Object orDefault = concurrentHashMap.getOrDefault("5", "sdf");
        //对每个（key，value）的每个非空变换执行给定的动作。   2:并行执行此操作所需的元素的（估计）数量,(线程数)
        concurrentHashMap.forEach(1, (k, v) -> System.out.println(k + ":" + v));
        //对每个条目执行给定的操作。
        concurrentHashMap.forEachEntry(6, entry -> System.out.println(entry.getKey()));
        //对每个条目的每个非空变换执行给定的操作。先变换，在操作
        concurrentHashMap.forEachEntry(3, Map.Entry::getValue, v -> System.out.println(v + "---"));
        //返回使用给定的reducer将所有（key，value）对的给定变换累加到组合值的结果，如果没有则返回null。
        //k:v--k:v--k:v--k:v
        String reduce = concurrentHashMap.reduce(3, (k, v) -> k + ":" + v, (k1, k2) -> k1 + "--" + k2);
        //通过在每个（键，值）上应用给定的搜索函数返回非空结果，如果没有则返回null。 成功后，进一步的元素处理被抑制，并且搜索功能的任何其他并行调用的结果被忽略。
        String search = concurrentHashMap.search(3, (k, v) -> {
            if (k.equals("c")) {
                return v + "=";
            }
            return null;
        });
        System.out.println(search);  //cc=

    }
}
